Лабораторная работа №1

Работа с Git

Бансимба К. Д.

Российский университет дружбы народов, Москва, Россия

20/02/2025

Информация

Докладчик

  • Бансимба Клодели Дьегра
  • студент
  • Российский университет дружбы народов
  • 1032215651@pfur.ru

Цель работы

Приобрести практические навыки работы с системой управления версиями Git.

Задания

  1. Создать репозиторий

  2. Изменить его содержимое, изучить работу с коммитами, версиями и тегами

  3. Поработать с объектами Git

  4. Создать дополнительную ветку, провести слияние, разрешение конфликтов

  5. Создать клон репозитория и слить его с оригинальным

  6. Залить и извлечь изменения

Выполнение лабораторной работы

Подготовка

Если вы никогда ранее не использовали git, для начала вам необходимо осуществить установку. Выполните следующие команды, чтобы git узнал ваше имя и электронную почту.

становка имени и электронной почты

Сначала настроим core.autocrlf с параметрами true и input, чтобы сделать все переводы строк текстовых файлов в главном репозитории одинаковыми, а затем настроим отображение unicode.

араметры установки окончаний строк
становка отображения unicode

Создание проекта

Создадим пустой каталог hello, а в нём файл с именем hello.html. Затем создадим git репозиторий из этого каталога, выполнив команду git init.

Создание репозитория

Создание проекта

Добавим файл в репозиторий и проверим статус, который сообщает, что коммитить нечего.

Добавление файла в репозиторий

Внесение изменений

Изменим содержимое файла hello.html на:

Внесение изменений в содержимое репозитория
Внесение изменений в содержимое репозитория

Внесение изменений

Изменим страницу «Hello, World», чтобы она содержала стандартные теги и
обавьте стандартные теги страницы

Внесение изменений

Теперь добавим это изменение в индекс git и добавим заголовки HTML (секцию

) к странице «Hello, World».

обавьте стандартные теги страницы

Внесение изменений

Проверив текущий статус увидим, что hello.html указан дважды в состоянии.

Внесение нескольких изменений в содержимое репозитория

История

Получим список произведенных изменений: git log

список произведенных изменений

История

Однострочный формат истории: git log –pretty=oneline Есть много вариантов отображения лога.

Однострочный формат истории и Есть много вариантов

Получение старых версий

Изучим данные лога и найдем там хэш первого коммита, используя его вернемся к первой верссии и просмотрим файл hello.html, действительно, увидим первую версию. Затем вернемся к последней версии в ветке master и вновь посмотрим на файл

Просмотр разных версий репозитория

Получение старых версий

Просмотр разных версий репозитория

Создание тегов версий

Назовем текущую версию страницы hello первой (v1). Создадим тег первой версии и используем его для того чтобы венуться к предыдущей, которой также присвоим тег.

Создание тегов версий

Создание тегов версий

Переключимся по тегам между двумя отмеченными версиями. Просмотрим все доступные теги(их два) и посмотрим теги в логе.

Переключение по имени тега и просмотр доступных тегов

Отмена локальных изменений (до индексации)

Убдеимся, что мы находимся на последнем коммите ветки master.

Отмена локальных изменений (до индексации)

Отмена локальных изменений (до индексации)

и внесем изменение в файл hello.html в виде нежелательного комментария.

изменение в файл

Отмена локальных изменений (до индексации)

Затем проверим статус, увидим, что изменения ещё не проиндексированы.

изменение в файл

Отмена локальных изменений (до индексации)

Используем команду git checkout для переключения версии файла hello.html в репозитории.

git checkout

Отмена проиндексированных изменений (перед коммитом)

Внесем изменение в файл hello.html в виде нежелательного комментария

изменение в файл hello.html

Отмена проиндексированных изменений (перед коммитом)

Проиндексируем это изменение и проверим состояние. git status
git status

Отмена коммитов

Изменим файл hello.html на следующий

Изменим файл hello.html

Отмена коммитов

Изменим файл hello.html

Отмена коммитов

Проверим лог. Проверка лога показывает нежелательные и отмененные коммиты в наш репозиторий.

Отмена коммитов

Удаление коммиттов из ветки

Удалим последние два коммита с помощью сброса, сначала отметим последний коммит тегом, чтобы его можно было потом найти. Используем команду git reset, чтобы вернуться к версии до этих коммитов.

Удаление коммиттов из ветки

Удаление коммиттов из ветки

Теперь в логе их нет, но если посмотреть логи с опцией –all можно всё ещё их увидеть, но метка HEAD находится на нужной нам версии.

Удаление коммиттов из ветки

Удаление тега oops

Удалим тег oops и коммиты, на которые он ссылался, сборщиком мусора. Теперь этот тег не отображается в репозитории.

Удаление тега oops

Внесение изменений в коммиты

Добавим в страницу комментарий автора.

автора

Внесение изменений в коммиты

Commit

Необходим email

комментарий должен включать электронную почту автора.

Email

Необходим email

Email

Просмотр истории

git log

Email

Перемещение файлов

Переместим наш файл в каталог lib. Для этого создадим его и используем команду git mv, сделаем коммит этого пермещения.

Перемещение файлов

Подробнее о структуре

Добавим файл index.html в наш репозиторий.

index.html

Подробнее о структуре

Добавим файл и сделаем коммит.

коммит

Подробнее о структуре

Теперь при открытии index.html, увидим кусок страницы hello в маленьком окошке .

Результат открытия index.html

Каталог .git

ls -C .git Это каталог, в котором хранится вся информация git.

информация git

База данных объектов

ls -C .git/objects

информация git

Config File

cat .git/config Это файл конфигурации, создающийся для каждого конкретного проекта. Записи в этом файле будут перезаписывать записи в файле.

Config File

Файл HEAD

cat .git/HEAD Файл HEAD содержит ссылку на текущую ветку, в данный момент это должна быть ветка master.

Файл HEAD

Работа непосредственно с объектами git

Найдем последний коммит и выедем его с помощью SHA1 хэша.

Работа непосредственно с объектами git

Создание ветки

Создадим новую ветку «style» и перейдем в неё.

Создание ветки

Создание ветки

добавим файл стилей style.css

добавим файл стилей

Создание ветки

добавим файл стилей

Создание ветки

Обновим файл hello.html

Редактирование файла

Создание ветки

Редактирование файла

Навигация по веткам

Посмотрим все логи.

Просмотр логов новой ветки

Изменения в ветке master

Вернемся в основную ветку и добавим файл README.md. Просмотрим ветки и их различия.

Изменения в ветке master

Просмотрите текущие ветки

Сделайте коммит изменений README.md в ветку master.

коммит

Просмотрите текущие ветки

для просмотра веток и их отличий.

для просмотра веток и их отличий

Слияние

Слияние переносит изменения из двух веток в одну. Вернемся к ветке style и сольем master с style.

Слияние веток

Создание конфликта

Вернемся в ветку master и создадим конфликт, внеся изменения в файл hello.html.

Создание конфликта

Создание конфликта

Просмотрим ветки. После коммита «Added README» ветка master была объединена с веткой style, но в настоящее время в master есть дополнительный коммит, который не был слит с style.

Просмотр веток

Слияние master с веткой style

Вернемся к ветке style и попытаемся объединить ее с новой веткой master.

Конфликт

Слияние master с веткой style

Внесем изменения в lib/hello.html, оставив только необходимую нам запись.

Конфликт

Слияние master с веткой style

добавим этот файл в репозиторий, чтобы вручную разрешить конфликт.

Разрешение конфликта

Сброс ветки style

Вернемся на ветке style к точке перед тем, как мы слили ее с веткой master.

Поиск коммита перед слиянием

Сброс ветки style

Мы видим, что коммит «Updated index.html» был последним на ветке style перед слиянием. Сбросим ветку style к этому коммиту.

Поиск коммита перед слиянием

Сброс ветки style

Поищим лог ветки style. Увидим, что у нас в истории больше нет коммитов слияний.

Сброс ветки style

Сброс ветки master

Добавив интерактивный режим в ветку master, мы внесли изменения, конфликтующие с изменениями в ветке style.

Поиск коммита перед конфликтом

Сброс ветки master

Коммит «Added README» идет непосредственно перед коммитом конфликтующего интерактивного режима.

Сброс ветки master

Перебазирование

Используем команду rebase вместо команды merge.

Перебазирование

Слияние в ветку master

Вернемся в ветку master и сольем ветку style в неё с помощью команды git merge.

Слияние style в master

Слияние в ветку master

Теперь ветки style и master идентичны.

Слияние style в master

Клонирование репозиториев

Перейдем в наш рабочий каталог и сделаем клон репозитория hello.

Клонирование репозиториев

Клонирование репозиториев

Клонирование репозиториев

Что такое origin?

Клонированный репозиторий знает об имени по умолчанию удаленного репозитория. Посмотрим, подробную информацию об имени по умолчанию.Для того, чтобы увидеть все ветки используем опцию -a.

Что такое origin?

Просмотр имени по умолчанию удаленного репозитория

Удаленные ветки

Посмотрим на ветки, доступные в нашем клонированном репозитории.

Удаленные ветки

Удаленные ветки

Для того, чтобы увидеть все ветки.

Удаленные ветки

Изменение оригинального репозитория

Внесем изменения в файл README.md. Затем добавим их в репозиторий.

Изменение оригинального репозитория

Изменение оригинального репозитория

Перейдём в клон репозитория и используем команду git fetch.

Извлечение изменений

Изменение оригинального репозитория

Мы можем продемонстрировать, что клонированный файл README.md не изменился.

Извлечение изменений

Слияние извлеченных изменений

Сольем внесённые изменения в главную ветку.

Слияние извлеченных изменений

Добавление ветки наблюдения

Добавим локальную ветку, которая отслеживает удаленную ветку.

Добавление ветки наблюдения

Добавление удаленного репозитория

добавим репозиторий hello.git к нашему оригинальному репозиторию.

добавим репозиторий hello.git

Отправка и извлечение изменений

Так как чистые репозитории, как правило, расшариваются на каком-нибудь сетевом сервере, нам необходимо отправить наши изменения в другие репозитории.

Отправка изменений

Начнем с создания изменения для отправки. Отредактируем файл README.md и сделаем коммит, затем отправим изменения в общий репозиторий

Отправка и извлечение изменений

Отправка изменений

Отправка и извлечение изменений

Затем извлечем изменения из общего репозитория.

Извлечение изменений

Выводы

В процессе выполнения данной лабораторной работы я приобрел практические навыки работы с Git.